﻿Public Class frm_usuarios
    Dim accesoDatos As New AccesoDatos("Usuario")
    Dim check As New Validar

    Enum actualizar
        modificar
        ingresar
    End Enum

    Dim accion As actualizar

    Private Sub Form_Usuarios_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim consulta As String = "SELECT e.idEmpleado, e.apellido FROM Empleado e WHERE e.idEmpleado NOT in (select u.idEmpleado from Usuario u)"
        cargarCombo(cmb_empleado, accesoDatos.consulta(consulta), "idEmpleado", "apellido")
        cargarGrilla(accesoDatos.leerUsuario())

        cmb_empleado.SelectedIndex = -1
        cmb_empleado.Enabled = False
        txt_idUsuario.Enabled = False
        txt_confirmarContraseña.Enabled = False
        txt_contraseña.Enabled = False
        txt_nombreUsuario.Enabled = False

        cmd_nuevo.Focus()

    End Sub

    Private Sub cargarCombo(ByRef combo As ComboBox, ByRef tablaACargar As Data.DataTable, ByVal indice As String, ByVal campo As String)
        combo.DataSource = Nothing
        combo.DataSource = tablaACargar
        combo.ValueMember = indice
        combo.DisplayMember = campo
    End Sub

    Private Sub cargarGrilla(ByVal tablaACargar As Data.DataTable)
        dgv_usuario.DataSource = tablaACargar
    End Sub


    Private Sub cmd_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_guardar.Click
        If validarBlancos() = True Then
            If validarNuevaContraseña(txt_contraseña.Text, txt_confirmarContraseña.Text) = True Then
                If MessageBox.Show("¿Está seguro que desea guardar los cambios?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
                    If accion = actualizar.ingresar Then
                        accesoDatos.insertar(True, generarStringValores())
                        MessageBox.Show("Usuario guardado con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Else
                        accesoDatos.Modificar(True, generarStringValores(), generarRestriccionUpdate("idUsuario", txt_idUsuario))
                        MessageBox.Show("Usuario guardado con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    End If
                    cargarGrilla(accesoDatos.leerUsuario())
                    Dim consulta As String = "SELECT e.idEmpleado, e.apellido FROM Empleado e WHERE e.idEmpleado NOT in (select u.idEmpleado from Usuario u)"
                    cargarCombo(cmb_empleado, accesoDatos.consulta(consulta), "idEmpleado", "apellido")
                Else
                    Exit Sub
                End If
            Else
                MessageBox.Show("La verificación de contraseña no coincide con la contraseña ingresada.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        End If
    End Sub

    Private Function validarNuevaContraseña(ByVal contraseña As String, ByVal confirmacion As String) As Boolean
        If contraseña = confirmacion Then
            Return True
        Else
            Return False
        End If
    End Function

    Private Function validarBlancos() As Boolean
        Dim resultado As Boolean = True
        If check.validarComboBlanco(cmb_empleado.SelectedIndex) = True Then
            MessageBox.Show("Seleccione un empleado.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            cmb_empleado.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_nombreUsuario.Text) = True Then
            MessageBox.Show("Ingrese un Nombre de Usuario.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_nombreUsuario.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_contraseña.Text) = True Then
            MessageBox.Show("Ingrese una contraseña.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_contraseña.Focus()
            resultado = False
        ElseIf check.validarBlanco(txt_confirmarContraseña.Text) = True Then
            MessageBox.Show("Confirme la contraseña.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_confirmarContraseña.Focus()
            resultado = False
        End If
        Return resultado
    End Function

    Private Function generarStringValores() As String
        Dim valores As String = "idEmpleado =" & cmb_empleado.SelectedValue
        valores &= ", pass =" & txt_contraseña.Text
        valores &= ", nombre =" & txt_nombreUsuario.Text
        Return valores
    End Function

    Private Function generarRestriccionUpdate(ByVal campo As String, ByRef valor As TextBox) As String
        Dim restriccion As String
        restriccion = campo & " = " & valor.Text
        Return restriccion
    End Function


    Private Sub cmd_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_salir.Click
        Me.Close()
    End Sub


    Private Sub cmd_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_nuevo.Click
        cargarGrilla(accesoDatos.leerUsuario())

        cmb_empleado.Enabled = True
        txt_contraseña.Enabled = True
        txt_confirmarContraseña.Enabled = True
        txt_nombreUsuario.Enabled = True

        txt_confirmarContraseña.Text = ""
        txt_contraseña.Text = ""
        txt_idUsuario.Text = ""
        txt_nombreUsuario.Text = ""
        cmb_empleado.SelectedIndex = -1

        cmb_empleado.Focus()
        accion = actualizar.ingresar
    End Sub

    Private Sub cmd_cancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_cancelar.Click
        txt_confirmarContraseña.Text = ""
        txt_contraseña.Text = ""
        txt_idUsuario.Text = ""
        txt_nombreUsuario.Text = ""
        cmb_empleado.SelectedIndex = -1
        cargarGrilla(accesoDatos.leerUsuario())
        cmb_empleado.Focus()
    End Sub

    Private Sub frm_usuarios_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If MessageBox.Show("¿Está seguro que desea salir?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            e.Cancel = False
            frm_menu.Show()
        Else
            e.Cancel = True
        End If
    End Sub


    Private Sub cmd_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_eliminar.Click
        If MessageBox.Show("¿Está seguro que desea eliminar?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then
            accesoDatos.eliminar("idUsuario", txt_idUsuario.Text)
            MessageBox.Show("¡Se elimino con exito!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            cargarGrilla(accesoDatos.leerUsuario())
        End If
    End Sub

    Private Sub dgv_usuario_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgv_usuario.DoubleClick
        cmb_empleado.Enabled = True
        txt_confirmarContraseña.Enabled = True
        txt_contraseña.Enabled = True
        txt_nombreUsuario.Enabled = True

        accion = actualizar.modificar
        Dim id As String = dgv_usuario.CurrentRow.Cells(0).Value
        Dim tabla As Data.DataTable = accesoDatos.obtenerUsuario(id)

        txt_idUsuario.Text = tabla.Rows(0)("idUsuario")
        cmb_empleado.SelectedValue = tabla.Rows(0)("idEmpleado")
        txt_contraseña.Text = tabla.Rows(0)("pass")
        txt_confirmarContraseña.Text = tabla.Rows(0)("pass")
        txt_nombreUsuario.Text = tabla.Rows(0)("nombre")

        txt_idUsuario.Enabled = False
        cmd_eliminar.Enabled = True
    End Sub
End Class